<?php
namespace app\api\controller\cart;

// 底层控制器
use think\Controller;

//引入cookie
use think\Cookie;

class Cart extends Controller {
    // 构造函数

    public function __construct() {
        // 手动把父类的方法获取过来
        parent::__construct();

        $this->UserModel = model( 'User.User' );
        $this->CartModel = model( 'Cart' );
        $this->ProductModel = model( 'Product.Product' );
        $this->VipModel = model( 'Product.Vip' );
    }

    // 购物车列表

    public function index() {
        if ( $this->request->isPost() ) {
            $cartids = $this->request->param( 'cartids', '' );
            $userId = $this->request->param( 'userid', 0 );

            // 获取用户信息
            $userInfo = $this->UserModel->find( $userId );

            // 当没有找到用户
            if ( !$userInfo ) {
                $this->error( '用户不存在，请登录' );
                exit;
            }

            // 初始化条件
            $where = [];

            if ( $userId ) {
                $where[ 'userid' ] = $userId;
            }

            if ( $cartids ) {
                $where[ 'cart.id' ] = [ 'in', $cartids ];
            }

            $result = $this->CartModel->with( 'product' )->where( $where )->select();

            if ( $result === false ) {
                $this->error( $this->CartModel->getError() );
                exit;
            } else {
                $this->success( '查询成功', null, $result );
                exit;
            }
        }
    }

    // 添加购物车

    public function add() {
        if ( $this->request->isPost() ) {
            $proid = $this->request->param( 'proid', 0 );
            $userid = $this->request->param( 'userid', 0 );

            $userinfo = $this->UserModel->find( $userid );

            //当没有找到用户的情况下
            if ( !$userinfo ) {
                $this->error( '用户不存在，请重新输入' );
                exit;
            }

            // 获取商品信息
            $productInfo = $this->ProductModel->find( $proid );

            // 判断商品是否存在
            if ( !$productInfo ) {
                $this->error( '商品不存在，请重新选择！' );
                exit;
            }

            // 判断是否有库存
            if ( !$productInfo[ 'stock' ] ) {
                $this->error( '商品库存不足！' );
                exit;
            }

            // 获取用户vip
            $vip = isset( $userinfo ) ? $userinfo[ 'vip' ] : 0;

            // 查询vip价格
            if ( $vip > 0 ) {
                // vip价格
                $vipPrice = $this->VipModel->where( [ 'proid' => $proid, 'level' => $vip ] )->value( 'price' );
                $price = $vipPrice ? $vipPrice : $productInfo[ 'price' ];
            } else {
                // 正常价格
                $price = $productInfo[ 'price' ];
            }

            /* 购物车操作 */
            // 添加购物车前，查询购物车是否有该商品
            $cart = $this->CartModel->where( [ 'userid' => $userid, 'proid' => $proid ] )->find();

            if ( $cart ) {
                /* 存在该商品 */
                // 数量加一
                $nums = $cart[ 'nums' ] + 1;

                // 总价更新
                $total = bcmul( $nums, $price );

                $data = [
                    'id' => $cart[ 'id' ],
                    'userid' => $userid,
                    'proid' => $proid,
                    'price' => $price,
                    'nums' => $nums,
                    'total' => $total,
                ];

                // 更新购物车表数据
                $result = $this->CartModel->isUpdate()->save( $data );

                if ( $result === FALSE ) {
                    $this->error( $this->CartModel->getError() );
                    exit;
                } else {
                    $this->success( '添加购物车成功,是否跳转到购物车立即下单', '/product/cart/index' );
                    exit;
                }
            } else {
                /* 不存在该商品 */
                $data = [
                    'userid' => $userid,
                    'proid' => $proid,
                    'price' => $price,
                    'nums' => 1,
                    'total' => $price,
                ];

                // 插入购物车表数据
                $result = $this->CartModel->save( $data );
                if ( $result === FALSE ) {
                    $this->error( $this->CartModel->getError() );
                    exit;
                } else {
                    $this->success( '添加购物车成功,是否跳转到购物车立即下单', '/product/cart/index' );
                    exit;
                }
            }

        }
    }

    // 删除购物车

    public function del() {
        if ( $this->request->isPost() ) {
            $cartid = $this->request->param( 'cartid', 0 );
            $userid = $this->request->param( 'userid', 0 );

            $userinfo = $this->UserModel->find( $userid );

            // 当没有找到用户
            if ( !$userinfo ) {
                $this->error( '用户不存在，请登录' );
                exit;
            }

            // 查询购物车表
            $cartInfo = $this->CartModel->find( $cartid );

            // 当商品信息不存在购物车表
            if ( !$cartInfo ) {
                $this->error( '用户不存在，请登录' );
                exit;
            }

            $result = $this->CartModel->destroy( $cartid );

            if ( $result === FALSE ) {
                $this->error( $this->CartModel->getError() );
                exit;
            } else {

                $data = [
                    'id' => $cartInfo[ 'proid' ],
                    'stock' => $cartInfo[ 'nums' ]
                ];

                $res  = $this->ProductModel->isUpdate()->save( $data );

                $this->success( '删除购物车成功' );
                exit;
            }

        }

    }

    // 修改购物车

    public function edit() {
        if ( $this->request->isPost() ) {
            $nums = $this->request->param( 'nums', 0 );
            $cartid = $this->request->param( 'cartid', 0 );
            $userid = $this->request->param( 'userid', 0 );

            $userinfo = $this->UserModel->find( $userid );

            // 当没有找到用户
            if ( !$userinfo ) {
                $this->error( '用户不存在，请登录' );
                exit;
            }

            // 查询购物车表
            $cartInfo = $this->CartModel->find( $cartid );

            // 当商品信息不存在购物车表
            if ( !$cartInfo ) {
                $this->error( '用户不存在，请登录' );
                exit;
            }

            $proid = $cartInfo[ 'proid' ] ? $cartInfo[ 'proid' ] : 0;

            // 判断用户是否存在
            $productInfo = $this->ProductModel->find( $proid );

            // 判断商品是否存在
            if ( !$productInfo ) {
                $this->error( '商品不存在，请重新选择！' );
                exit;
            }

            // 判断是否有库存
            if ( !$productInfo[ 'stock' ] ) {
                $this->error( '商品库存不足！' );
                exit;
            }

            // 重新计算总价
            $total = bcmul( $nums, $productInfo[ 'price' ] );

            $data = [
                'id' => $cartid,
                'nums' => $nums,
                'total' => $total
            ];

            // 数据库更新
            $result = $this->CartModel->isUpdate()->save( $data );

            if ( $result === FALSE ) {
                $this->error( $this->CartModel->getError() );
                exit;
            } else {
                $this->success( '修改购物车成功' );
                exit;
            }
        }
    }

    // 获取购物车数量

    public function num() {
        // 提示信息
        $Tips = [
            'result' => false,
            'msg' => '',
        ];

        // 获取userid
        $userid = $this->request->param( 'userid', 0 );

        $userinfo = $this->UserModel->where( [ 'id' => $userid ] )->find();

        // 若没有用户信息
        if ( !$userinfo ) {
            $Tips[ 'msg' ] = '无用户信息';
            return $Tips;
            exit;
        }

        // 获取购物车数量
        $cartNum = $this->CartModel->where( [ 'userid' => $userid ] )->select();

        $nums = 0;
        foreach ( $cartNum as $item ) {
            $nums += $item[ 'nums' ];
        }

        $Tips[ 'result' ] = true;
        $Tips[ 'msg' ] = $nums;
        return  $Tips;
    }

    // 立即购买

    public function noworder() {
        $proid = $this->request->param( 'proid', 0 );
        $userid = $this->request->param( 'userid', 0 );

        // 获取用户信息
        $userinfo = $this->UserModel->where( [ 'id' => $userid ] )->find();
        if ( !$userinfo ) {
            $this->error( '未找到用户信息！' );
            exit;
        }

        // 获取商品信息
        $productinfo = $this->ProductModel->where( [ 'id' => $proid ] )->find();
        if ( !$userinfo ) {
            $this->error( '商品信息不存在！' );
            exit;
        }

        // 判断是否有库存
        if ( !$productinfo[ 'stock' ] ) {
            $this->error( '商品库存不足！' );
            exit;
        }

        $this->success( '获取商品信息成功！', '', $proid );
        exit;
    }

    // 获取单个商品

    public function oneorder() {
        $proid = $this->request->param( 'proid', 0 );
        $userid = $this->request->param( 'userid', 0 );

        // 获取用户信息
        $userinfo = $this->UserModel->where( [ 'id' => $userid ] )->find();
        if ( !$userinfo ) {
            $this->error( '未找到用户信息！' );
            exit;
        }

        // 获取商品信息
        $productinfo = $this->ProductModel->where( [ 'id' => $proid ] )->find();
        if ( !$userinfo ) {
            $this->error( '商品信息不存在！' );
            exit;
        }

        // 判断是否有库存
        if ( !$productinfo[ 'stock' ] ) {
            $this->error( '商品库存不足！' );
            exit;
        }

        // 获取用户vip
        $vip = isset( $userinfo ) ? $userinfo[ 'vip' ] : 0;

        // 查询vip价格
        if ( $vip > 0 ) {
            // vip价格
            $vipPrice = $this->VipModel->where( [ 'proid' => $proid, 'level' => $vip ] )->value( 'price' );
            $price = $vipPrice ? $vipPrice : $productinfo[ 'price' ];
        } else {
            // 正常价格
            $price = $productinfo[ 'price' ];
        }

        $productinfo[ 'price' ] = $price;
        $productinfo[ 'nums' ] = 1;
        $productinfo[ 'total' ] = $price;

        $this->success( '获取商品信息成功！', '', $productinfo );
        exit;
    }
}